home *** CD-ROM | disk | FTP | other *** search
/ Aminet 50 / Aminet 50 (2002)(GTI - Schatztruhe)[!][Aug 2002].iso / Aminet / text / edit / tecoc-146.lha / exek.c < prev    next >
C/C++ Source or Header  |  1991-07-05  |  2KB  |  74 lines

  1. /*****************************************************************************
  2.  
  3.     ExeK()
  4.  
  5.     This function executes a K command.
  6.     nK    Kill n lines
  7.     m,nK    Delete between m and n
  8. *****************************************************************************/
  9.  
  10. #include "zport.h"        /* define portability identifiers */
  11. #include "tecoc.h"        /* define general identifiers */
  12. #include "defext.h"        /* define external global variables */
  13.  
  14. DEFAULT ExeK()            /* execute a K command */
  15. {
  16.     ptrdiff_t    HowFar;
  17.  
  18.     DBGFEN(1,"ExeK",NULL);
  19.  
  20.     if (EStTop == EStBot) {            /* if no numeric argument */
  21.         NArgmt = 1;            /* default is 1K */
  22.     } else {
  23.         UMinus();            /* if it's -K, make it -1K */
  24.         if (GetNmA() == FAILURE) {    /* get numeric argument */
  25.             DBGFEX(1,DbgFNm,"FALURE");
  26.             return FAILURE;
  27.         }
  28.     }
  29.  
  30.     if (CmdMod & MARGIS) {            /* if it's m,nK */
  31.         if (NArgmt == MArgmt) {        /* if n equals m */
  32.             CmdMod = '\0';        /* clear modifiers flags */
  33.             DBGFEX(1,DbgFNm,"SUCCESS");
  34.             return SUCCESS;
  35.         }
  36.         MEMMOVE(ErrTxt,
  37.             (*CBfPtr == 'D' || *CBfPtr=='d') ? "m,nD" : "m,nK",
  38.             5);
  39.         if (GetAra() == FAILURE) {
  40.             DBGFEX(1,DbgFNm,"FAILURE");
  41.             return FAILURE;
  42.         }
  43.         if ((AraBeg < GapBeg) && (AraEnd > GapEnd)) {
  44.             GapBeg = AraBeg;
  45.             GapEnd = AraEnd;
  46.         } else {
  47.             if (AraEnd < GapEnd) {
  48.                 HowFar = (GapBeg-1) - AraEnd;
  49.                 GapBeg -= HowFar;
  50.                 GapEnd -= HowFar;
  51.                 MEMMOVE(GapEnd+1, GapBeg, (SIZE_T)HowFar);
  52.                 GapBeg = AraBeg;
  53.             } else {
  54.                 HowFar = AraBeg - (GapEnd+1);
  55.                 MEMMOVE(GapBeg, GapEnd+1, (SIZE_T)HowFar);
  56.                 GapBeg += HowFar;
  57.                 GapEnd = AraEnd;
  58.             }
  59.         }
  60.     } else {                /* else it's nK */
  61.         NArgmt = Ln2Chr(NArgmt);    /* cvt line to char offset */
  62.         if (NArgmt > 0) {
  63.             GapEnd += NArgmt;
  64.         } else {
  65.             GapBeg += NArgmt;
  66.         }
  67.     }
  68.  
  69.     CmdMod = '\0';                /* clear modifiers flags */
  70.  
  71.     DBGFEX(1,DbgFNm,"SUCCESS");
  72.     return SUCCESS;
  73. }
  74.